# 这个方式，一般会用在 封装高级装饰器/高级函数
"""
不定参数也可以叫做 万能参数

意思是，随便你传递多少个都可以。

当然，函数能不能处理是编写者需要考虑的事情。

不定参数也会和后面的 装饰器 关联，后面会做介绍。
"""

# *  位置参数的不定参数
# def add(x, y, *args):
#     sum = x + y
#     print(args)
#     # for arg in args:
#     #     sum += arg
#     #
#     # print(sum)

# def add(x, y, *args):
#     sum = x + y
#     for arg in args:
#         sum += arg
#
#     print(sum)
#
# add(1, 2)
# add(1, 2, 4, 5, 6, 7, 8)

"""
*args 中，args只是参数名，可以叫其他名字都可以

重要的是 *，这个符号可以将多余的参数 塞入 定义的参数名中

比如上述代码中 4, 5, 6, 7, 8 即为多余的参数，我们可以将它全部的塞入 args中

所以，想要容纳 不定数量 的参数，args最终的形态肯定是一个容器，python将其规定为 元组 类型

也是因为 元组的值不可变
"""

# **  关键字参数的不定参数
# def userInfo(username, age, **kwargs):
#     print(f"我叫 {username}, 今年 {age}")
#
#     if kwargs:
#         print(f"对了我还有其他的信息可以告诉你")
#         for key, value in kwargs.items():
#             print(f"我的 {key} 为 {value}")
#
# userInfo('muzhou', '18')
# userInfo('muzhou', '18', sex='man', city='成都')

## 为什么叫万能参数

# def test(*args, **kwargs):
#     print(args)
#     print(kwargs)
#
# test(1, 2, 3, sex="123", city="1234")